<?php
/**
 * 守护程序
 * 系统会通过计划任务执行php.exe daemon.php周期性（T<20min）启动本程序，实现循环处理   
 */

include_once("./vendor/autoload.php"); //composer自动加载

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\FirePHPHandler;

// 如果生产环境配置文件存在就使用生产环境的，为了便于库的管理且防止关键配置泄露
// 请将config.production.php加入.gitignore中，这样开源的时候修改config.php作为样例即可
if(file_exists("./config.production.php")){ 
    include_once("./config.production.php");
}else{
    include_once("./config.php");
}


// 日志
$logger = new Logger('my_logger');
$logger->pushHandler(new StreamHandler(__DIR__.$_CFG['sys']['log'], Logger::DEBUG));

$logger->info('running');

$db = new MysqliDb($_CFG['db']);
    
$sql = 'SELECT * FROM sms_dang_member WHERE SEND_FLAG=0 AND (MONTH(NOW())=MONTH(JOIN_DATE) AND DAY(NOW())=DAY(JOIN_DATE)  )';
$members = $db->rawQuery($sql);
$logger->info('有'.count($members).'条短信待发送');
foreach ($members as $k => $m) {
    $name  = trim($m['NAME']);
    $id    = $m['ID'];
    $phone = trim($m['PHONE']);
    $join_date = $m['JOIN_DATE'];
    $day = $join_date;
    if(!isValidPhone($phone)){
        $logger->info("手机号错误，不予发送。");
        continue;
    }
    $content = "{$name}同志，今天是您的政治生日，{$day}您光荣的加入了中国共产党，踏上了追求共产主义崇高理想的新征程。在您入党周年之际，谨向您表达最诚挚的祝福！希望您时刻牢记自己是一名共产党员，注重党性修养，铭记党的宗旨，不忘初心，牢记使命，继续前行，永葆共产党员的先进本色。同时，祝您和您的家人身体健康，生活愉快！祝福页面:https://m.rrxiu.net/?v=5f1bi5 {$_CFG['sms']['sign']}";
    $postData = [
        "loginName"  => $_CFG['sms']['loginName'],
        "password"   => $_CFG['sms']['password'],
        "mobiles"    => $phone,
        "content"    => $content,
    ];
    $logger->info("发送短信：userId:$id,phone:$phone,content:$content");
    $ret = curl_file_post_contents($_CFG['sms']['api_url'],$postData);
    $xml = simplexml_load_string($ret);
    $xmljson=json_encode($xml);
    $logger->info($xmljson);
    $xml=json_decode($xmljson,true);
    //var_dump($xml);
    //成功与否都回写数据库
    $data = [
        'SEND_FLAG' => 1
    ];
    $db->where('ID',$id)->update('sms_dang_member',$data);

}


/**
 * 验证手机号合法性
 * @param string phone 手机号
 * @return boolean true or false
 */
function isValidPhone($phone=''){
    if(preg_match("/^1[3456789]{1}\d{9}$/",$phone)){
        return true;
    }
    return false;
}

/**  
*   php访问url路径，post请求
*
*   durl   路径url
*   post_data   array()   post参数数据
*/
function curl_file_post_contents($durl, $post_data){
    // header传送格式
    $headers = array();
    //初始化
    $curl = curl_init();
    //设置抓取的url
    curl_setopt($curl, CURLOPT_URL, $durl);
    //设置头文件的信息作为数据流输出
    curl_setopt($curl, CURLOPT_HEADER, false);
    //设置获取的信息以文件流的形式返回，而不是直接输出。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    //设置post方式提交
    curl_setopt($curl, CURLOPT_POST, true);
    // 设置post请求参数
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    // 添加头信息
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    // CURLINFO_HEADER_OUT选项可以拿到请求头信息
    curl_setopt($curl, CURLINFO_HEADER_OUT, true);
    // 不验证SSL
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    //执行命令
    $data = curl_exec($curl);
    // 打印请求头信息
//        echo curl_getinfo($curl, CURLINFO_HEADER_OUT);
    //关闭URL请求
    curl_close($curl);
    //显示获得的数据
    return $data;
}
